perm filename SCAHEX.F4[RST,LCS] blob
sn#079920 filedate 1974-02-12 generic text, type T, neo UTF8
00100 SUBROUTINE SCAHEX
00200
00300 C NOVEMBER 9, 69
00400
00500 DIMENSION LIST5(0/1000),LIST(6,1000),
00600 1 XP(0/176),YP(0/176),T(0/1415),HYSTAB(0/15)
00700
00800 INTEGER CIRCLE,RETA,CIRLOD,
00900 1 FILEN,FLINE,FLINEC,I,IC,IRR,
01000 1 IX,IY,JX,JY,LIST5,
01100 1 LLINE,LLINEC,LSIDE,LSIDEC,NX,NY,NEWEND,
01200 1 PARMAX,RSIDE,RSIDEC,STEPX,
01300 1 STEPY,TAPE,XP,YP,
01400 1 OLDEND,N,X,Y,BITS,ENDOLD,
01500 1 XFI,XLA,YFI,YLA
01600
01700 REAL DII,CL,SL,D,B,COH,DI,T,HALF,QI,RAT,
01800 1 LEAP,LIST,RR,RX,RY,CH,CHH
01900
02000 LOGICAL FORWAR,DEBUG,LO,MISSD,EMPTY
02100
02200 COMMON /EDGEC/ A0,A1,A2,A3,A4,A5,A6,A7,
02300 1 DEBUG,T,XP,YP,PARMAX,
02400 1 HALF,FILE,RR,COH,RX,RY,CL,SL,D,B,FOUND
02500
02600 COMMON /LISTC/ LIST,LIST5,NEWEND,LO
02700
02800 COMMON/COMMAC/BCLIP,TCLIP,BITS,IWID,LINLEN,FLINE,LLINE,
02900 1 LSIDE,RSIDE,DTA,HYSTAB
03000
03100 DO 10 N=0,1000
03200 10 LIST5(N)=N+1
03300 20 FORMAT(' TYPE DESIRED CIRCLE SIZE NUMBER'/)
03400 30 FORMAT(I)
03500 40 FORMAT(1H+,I1/)
03600 DEBUG=.FALSE.
03700 XFI=2
03800 XLA=1
03900 YFI=2
04000 YLA=1
04100 QI=1.0
04200 IF((LLINE.GT.256).OR.(RSIDE.GT.333)) QI=4.0
04300 50 FORMAT(' PRESCRIBE CONFIDENCE THRESHOLD'/)
04400 49 TYPE 50
04500 51 FORMAT(F)
04600 ACCEPT 51,CHH
04700 52 FORMAT(1H+,F4.2/)
04800 CC TYPE 52,CHH
04900 IF((0.0.LT.CHH).AND.(CHH.LT.1.0)) GOTO 44
05000 TYPE 53
05100 GOTO 49
05200 42 FORMAT(' PRESCRIBE DIFFERENCE THRESHOLD'/)
05300 44 TYPE 42
05400 ACCEPT 51,DII
05500 CC TYPE 52,DII
05600 IF((DII.GT.0.0).AND.(DII.LT.15.0)) GOTO 54
05700 53 FORMAT(' YOU MUST BE KIDDING')
05800 TYPE 53
05900 GOTO 44
06000 C LOAD WITH DDT DEBUG,XFI,XLA,YFI,YLA
06100 54 DII=DII*QI
06200 DI=DII/2.0
06300 CH=1.0-2.0*(1.0-CHH)
06400 47 FORMAT(1X)
06500 IF(DEBUG) PRINT 47
06600 TYPE 20
06700 ACCEPT 30,CIRCLE
06800 CC TYPE 40,CIRCLE
06900 HALF=0.5
07000 GOTO(80,90,100,110,120), CIRCLE
07100 70 FORMAT(16H WRONG CIRCLE, = I)
07200 TYPE 70, CIRCLE
07300 CALL EXIT
07400 80 FILE=5HSIZE1
07500 HALF=0.
07600 GOTO 140
07700 90 FILE=5HSIZE2
07710 PARMAX=51
07800 HALF=0.
07900 GOTO 140
08000 100 FILE=5HSIZE3
08010 PARMAX=68
08100 GOTO 140
08200 110 FILE=5HSIZE4
08300 GOTO 140
08400 120 FILE=5HSIZE5
08500 140 IF((RETA.EQ.1234567897).AND.(CIRCLE.EQ.CIRLOD)) GOTO 205
08600 CC144 FORMAT(' TYPE NUMBER OF DEVICE PROVIDING THE TABLE'/)
08700 CC TYPE 144
08800 CC ACCEPT 30,TAPE
08900 CC148 FORMAT(1H+,I2)
09000 CC TYPE 148,TAPE
09100 CC TAPE=TAPE+8
09150 CC CALL ZERPP
09162 TAPE=1
09175 REWIND TAPE
09200 CALL IFILE(TAPE,FILE)
09300 READ(TAPE)FILEN,(T(N),N=0,FILEN-356),XP,YP,PARMAX
09350 CC READ(TAPE)FILEN,(T(N),N=0,FILEN-356),XP,N,YP,PARMAX
09375 C ABOVE CHANGE TO TRY TO READ TABLES PROPERLY
09400 CIRLOD=CIRCLE
09500 RETA=1234567897
09600 150 FORMAT(' TABLES HAVE BEEN LOADED NOW')
09700 TYPE 150
09800 205 IF((PARMAX-31)*(PARMAX-51)*(PARMAX-68)*(PARMAX-136)*
09900 1(PARMAX-176).EQ.0) GOTO 200
10000 180 FORMAT(14H FALSE PARMAX= I)
10100 TYPE 180, PARMAX
10200 CALL EXIT
10300 200 RR=SQRT((PARMAX+1)/3.1415927)
10400 CALL MSCAN
10500 LO=.FALSE.
10600 IF(DEBUG) PRINT 214,RETA,REIM,CIRCLE,CHH,FILE,
10700 1 FLINE,LLINE,LSIDE,RSIDE,BITS
10800 214 FORMAT(6H RETA=L1,4X5HREIM=L1,4X7HCIRCLE=I1,4X,4HCHH
10900 1=F4.1,4X5HFILO=A5,4X6HFLINE=I3,4X6HLLINE=I3,4X6H
11000 1LSIDE=I3,4X6HRSIDE=I3,4X5HBITS=I1//)
11100
11200 218 FORMAT(10H COMPUTING)
11300 TYPE 218
11400 IRR=IFIX(RR+0.5)
11500 LSIDEC=LSIDE+IRR
11600 RSIDEC=RSIDE-IRR
11700 FLINEC=FLINE+IRR
11800 LLINEC=LLINE-IRR
11900 LEAP=RR/2.+2.41
12000 IF(DEBUG) CALL ASD(8,'LEAP',LEAP)
12100 FORWAR=.TRUE.
12200 STEPY=IRR
12300 STEPX=(2*IFIX(0.5773*RR+.5))
12400 IX=(RSIDEC-LSIDEC-STEPX/2)/STEPX
12500 IY=(LLINEC-FLINEC)/STEPY
12600 NEWEND=0
12700 OLDEND=0
12800 NY=FLINEC-STEPY
12900 C HERE BEGINS THE SCANNING
13000
13100 DO 234 JY=0,IY
13200 NY=NY+STEPY
13300 IC=MOD(JY,2)*STEPX/2
13400 OLDEND=NEWEND
13500 NX=LSIDEC-STEPX+IC
13600
13700 DO 241 JX=0,IX
13800 NX=NX+STEPX
13900 DEBUG=((XFI.LE.NX).AND.(NX.LE.XLA)).AND.((
14000 1YFI.LE.NY).AND.(NY.LE.YLA))
14100 CC IF(.NOT.DEBUG) GOTO 322
14200 CC CALL ASD(8,'NX',NX)
14300 CC CALL ASD(8,'NY',NY)
14400 322 IF(SEINF(NX,NY)) GOTO 240
14500 CALL EDGE(NX,NY)
14600 RAT=(D/DI)**2
14700 IF((1-COH).GT.(1-CH)*RAT/(1.0+RAT)) GOTO 240
14800
14900 C HERE BEGINS THE TRACING
15000 EMPTY=.TRUE.
15100 1300 FORMAT(8H ERROR L//)
15200 IF(LEAP.LT.0.) TYPE 1300
15300 1200 FORMAT(8H ERROR F//)
15400 IF(.NOT.FORWAR) TYPE 1200
15500 FORWAR=.TRUE.
15600 MISSD=.TRUE.
15700 370 X=IFIX(RX+HALF)
15800 Y=IFIX(RY+HALF)
15900 GOTO 270
16000 230 ENDOLD=NEWEND
16100 CALL PLUG(ENDOLD,RX,RY,CL,SL,D,B)
16200 229 MISSD=.TRUE.
16300 X=IFIX(RX+SL*LEAP+HALF)
16400 Y=IFIX(RY-CL*LEAP+HALF)
16500 270 IF(X.LT.LSIDEC) GOTO 232
16600 IF(X.GT.RSIDEC) GOTO 232
16700 IF(Y.LT.FLINEC) GOTO 232
16800 IF(Y.GT.LLINEC) GOTO 232
16900 IF(SEINF(X,Y)) GOTO 232
17000 CC IF(.NOT.DEBUG) GOTO 235
17100 CC CALL ASD(9,' X',X)
17200 CC CALL ASD(9,' Y',Y)
17300 235 CALL EDGE(X,Y)
17400 RAT=(D/DII)**2
17500 IF((1-COH).LT.(1-CHH)*RAT/(1.0+RAT)) GOTO 233
17600 IF(EMPTY) GOTO 240
17700 MISSD=.NOT.MISSD
17800 IF(.NOT.MISSD) GOTO 370
17900 232 IF(EMPTY) GOTO 240
18000 LEAP=-LEAP
18100 FORWAR=.NOT.FORWAR
18200 IF(.NOT.FORWAR) GOTO 237
18300 OLDEND=NEWEND
18400 GOTO 240
18500 237 N=LIST5(OLDEND)
18600 RX=LIST(1,N)
18700 RY=LIST(2,N)
18800 CL=LIST(3,N)
18900 SL=LIST(4,N)
19000 GOTO 229
19100 233 IF(SEINT(IFIX(RX+.5),IFIX(RY+.5))) GOTO 232
19200 EMPTY=.FALSE.
19300 CC IF(.NOT.DEBUG) GOTO 236
19400 CC CALL ASD(1,'FORWAR',FORWAR)
19500 CC CALL ASD(1,'RX',RX)
19600 CC CALL ASD(1,'RY',RY)
19700 236 IF(FORWAR) GOTO 230
19800 CALL PLUG(OLDEND,RX,RY,CL,SL,D,B)
19900 GOTO 229
20000 240 IF(LO) GOTO 255
20100 241 CONTINUE
20200 234 CONTINUE
20300
20400 255 IF(NEWEND.GT.0) GOTO 250
20500 TYPE 260
20600 260 FORMAT(9H NO LISTS)
20700 CALL EXIT
20800 250 CALL STRAIT
20900 RETURN
21000 END